package oj;

//移出链表元素：给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回新的头节点 。
public class Solution_203 {
    public ListNode removeElements(ListNode head, int val) {
        ListNode cur = head;
        ListNode prev = null;
        ListNode newHead = head;

        while(cur != null){
            //相等时，需要删除该结点，需要其前驱结点
            if(cur.val == val){
                //如果第一个结点就是要找的结点，那么就用newHead作为新的头结点
                //prev == null的意思就是prev不指向任何结点
                if(prev == null){
                    newHead = cur.next;
                }else{
                    //找到相应的val时，将cur指向的结点已经删除，prev不用移动，只需要移动cur
                    prev.next = cur.next;
                }
            }else{
                prev = cur;
            }
            cur = cur.next;
        }
        return newHead;
    }
}
